package net.danieldietrich.gwt.dsl.parser.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.xtext.parsetree.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.xtext.conversion.ValueConverterException;
import net.danieldietrich.gwt.dsl.services.DomainModelGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalDomainModelParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'import'", "';'", "'package'", "'{'", "'}'", "'datatype'", "'entity'", "'extends'", "'ref'", "'opposite'", "'('", "','", "')'", "'*'", "'.*'", "'.'", "'public'", "'private'", "'protected'"
    };
    public static final int RULE_ID=4;
    public static final int RULE_STRING=6;
    public static final int RULE_ANY_OTHER=10;
    public static final int RULE_INT=5;
    public static final int RULE_WS=9;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;

        public InternalDomainModelParser(TokenStream input) {
            super(input);
        }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g"; }



     	private DomainModelGrammarAccess grammarAccess;
     	
        public InternalDomainModelParser(TokenStream input, IAstFactory factory, DomainModelGrammarAccess grammarAccess) {
            this(input);
            this.factory = factory;
            registerRules(grammarAccess.getGrammar());
            this.grammarAccess = grammarAccess;
        }
        
        @Override
        protected InputStream getTokenFile() {
        	ClassLoader classLoader = getClass().getClassLoader();
        	return classLoader.getResourceAsStream("net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.tokens");
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "DomainModel";	
       	}
       	
       	@Override
       	protected DomainModelGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start entryRuleDomainModel
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:78:1: entryRuleDomainModel returns [EObject current=null] : iv_ruleDomainModel= ruleDomainModel EOF ;
    public final EObject entryRuleDomainModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDomainModel = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:79:2: (iv_ruleDomainModel= ruleDomainModel EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:80:2: iv_ruleDomainModel= ruleDomainModel EOF
            {
             currentNode = createCompositeNode(grammarAccess.getDomainModelRule(), currentNode); 
            pushFollow(FOLLOW_ruleDomainModel_in_entryRuleDomainModel75);
            iv_ruleDomainModel=ruleDomainModel();
            _fsp--;

             current =iv_ruleDomainModel; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDomainModel85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleDomainModel


    // $ANTLR start ruleDomainModel
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:87:1: ruleDomainModel returns [EObject current=null] : ( (lv_elements_0_0= ruleAbstractElement ) )* ;
    public final EObject ruleDomainModel() throws RecognitionException {
        EObject current = null;

        EObject lv_elements_0_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:92:6: ( ( (lv_elements_0_0= ruleAbstractElement ) )* )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:93:1: ( (lv_elements_0_0= ruleAbstractElement ) )*
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:93:1: ( (lv_elements_0_0= ruleAbstractElement ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==11||LA1_0==13||(LA1_0>=16 && LA1_0<=17)) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:94:1: (lv_elements_0_0= ruleAbstractElement )
            	    {
            	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:94:1: (lv_elements_0_0= ruleAbstractElement )
            	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:95:3: lv_elements_0_0= ruleAbstractElement
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getDomainModelAccess().getElementsAbstractElementParserRuleCall_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleAbstractElement_in_ruleDomainModel130);
            	    lv_elements_0_0=ruleAbstractElement();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getDomainModelRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"elements",
            	    	        		lv_elements_0_0, 
            	    	        		"AbstractElement", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleDomainModel


    // $ANTLR start entryRuleAbstractElement
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:125:1: entryRuleAbstractElement returns [EObject current=null] : iv_ruleAbstractElement= ruleAbstractElement EOF ;
    public final EObject entryRuleAbstractElement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractElement = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:126:2: (iv_ruleAbstractElement= ruleAbstractElement EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:127:2: iv_ruleAbstractElement= ruleAbstractElement EOF
            {
             currentNode = createCompositeNode(grammarAccess.getAbstractElementRule(), currentNode); 
            pushFollow(FOLLOW_ruleAbstractElement_in_entryRuleAbstractElement166);
            iv_ruleAbstractElement=ruleAbstractElement();
            _fsp--;

             current =iv_ruleAbstractElement; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractElement176); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleAbstractElement


    // $ANTLR start ruleAbstractElement
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:134:1: ruleAbstractElement returns [EObject current=null] : (this_PackageDeclaration_0= rulePackageDeclaration | this_Type_1= ruleType | this_Import_2= ruleImport ) ;
    public final EObject ruleAbstractElement() throws RecognitionException {
        EObject current = null;

        EObject this_PackageDeclaration_0 = null;

        EObject this_Type_1 = null;

        EObject this_Import_2 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:139:6: ( (this_PackageDeclaration_0= rulePackageDeclaration | this_Type_1= ruleType | this_Import_2= ruleImport ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:140:1: (this_PackageDeclaration_0= rulePackageDeclaration | this_Type_1= ruleType | this_Import_2= ruleImport )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:140:1: (this_PackageDeclaration_0= rulePackageDeclaration | this_Type_1= ruleType | this_Import_2= ruleImport )
            int alt2=3;
            switch ( input.LA(1) ) {
            case 13:
                {
                alt2=1;
                }
                break;
            case 16:
            case 17:
                {
                alt2=2;
                }
                break;
            case 11:
                {
                alt2=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("140:1: (this_PackageDeclaration_0= rulePackageDeclaration | this_Type_1= ruleType | this_Import_2= ruleImport )", 2, 0, input);

                throw nvae;
            }

            switch (alt2) {
                case 1 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:141:5: this_PackageDeclaration_0= rulePackageDeclaration
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getAbstractElementAccess().getPackageDeclarationParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FOLLOW_rulePackageDeclaration_in_ruleAbstractElement223);
                    this_PackageDeclaration_0=rulePackageDeclaration();
                    _fsp--;

                     
                            current = this_PackageDeclaration_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:151:5: this_Type_1= ruleType
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getAbstractElementAccess().getTypeParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleType_in_ruleAbstractElement250);
                    this_Type_1=ruleType();
                    _fsp--;

                     
                            current = this_Type_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 3 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:161:5: this_Import_2= ruleImport
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getAbstractElementAccess().getImportParserRuleCall_2(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleImport_in_ruleAbstractElement277);
                    this_Import_2=ruleImport();
                    _fsp--;

                     
                            current = this_Import_2; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleAbstractElement


    // $ANTLR start entryRuleImport
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:177:1: entryRuleImport returns [EObject current=null] : iv_ruleImport= ruleImport EOF ;
    public final EObject entryRuleImport() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleImport = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:178:2: (iv_ruleImport= ruleImport EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:179:2: iv_ruleImport= ruleImport EOF
            {
             currentNode = createCompositeNode(grammarAccess.getImportRule(), currentNode); 
            pushFollow(FOLLOW_ruleImport_in_entryRuleImport312);
            iv_ruleImport=ruleImport();
            _fsp--;

             current =iv_ruleImport; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleImport322); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleImport


    // $ANTLR start ruleImport
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:186:1: ruleImport returns [EObject current=null] : ( 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) ) ';' ) ;
    public final EObject ruleImport() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_importedNamespace_1_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:191:6: ( ( 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) ) ';' ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:192:1: ( 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) ) ';' )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:192:1: ( 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) ) ';' )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:192:3: 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) ) ';'
            {
            match(input,11,FOLLOW_11_in_ruleImport357); 

                    createLeafNode(grammarAccess.getImportAccess().getImportKeyword_0(), null); 
                
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:196:1: ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:197:1: (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:197:1: (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:198:3: lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getImportAccess().getImportedNamespaceQualifiedNameWithWildCardParserRuleCall_1_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleQualifiedNameWithWildCard_in_ruleImport378);
            lv_importedNamespace_1_0=ruleQualifiedNameWithWildCard();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getImportRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"importedNamespace",
            	        		lv_importedNamespace_1_0, 
            	        		"QualifiedNameWithWildCard", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,12,FOLLOW_12_in_ruleImport388); 

                    createLeafNode(grammarAccess.getImportAccess().getSemicolonKeyword_2(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleImport


    // $ANTLR start entryRulePackageDeclaration
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:232:1: entryRulePackageDeclaration returns [EObject current=null] : iv_rulePackageDeclaration= rulePackageDeclaration EOF ;
    public final EObject entryRulePackageDeclaration() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePackageDeclaration = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:233:2: (iv_rulePackageDeclaration= rulePackageDeclaration EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:234:2: iv_rulePackageDeclaration= rulePackageDeclaration EOF
            {
             currentNode = createCompositeNode(grammarAccess.getPackageDeclarationRule(), currentNode); 
            pushFollow(FOLLOW_rulePackageDeclaration_in_entryRulePackageDeclaration424);
            iv_rulePackageDeclaration=rulePackageDeclaration();
            _fsp--;

             current =iv_rulePackageDeclaration; 
            match(input,EOF,FOLLOW_EOF_in_entryRulePackageDeclaration434); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRulePackageDeclaration


    // $ANTLR start rulePackageDeclaration
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:241:1: rulePackageDeclaration returns [EObject current=null] : ( 'package' ( (lv_name_1_0= ruleQualifiedName ) ) '{' ( (lv_elements_3_0= ruleAbstractElement ) )* '}' ) ;
    public final EObject rulePackageDeclaration() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_name_1_0 = null;

        EObject lv_elements_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:246:6: ( ( 'package' ( (lv_name_1_0= ruleQualifiedName ) ) '{' ( (lv_elements_3_0= ruleAbstractElement ) )* '}' ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:247:1: ( 'package' ( (lv_name_1_0= ruleQualifiedName ) ) '{' ( (lv_elements_3_0= ruleAbstractElement ) )* '}' )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:247:1: ( 'package' ( (lv_name_1_0= ruleQualifiedName ) ) '{' ( (lv_elements_3_0= ruleAbstractElement ) )* '}' )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:247:3: 'package' ( (lv_name_1_0= ruleQualifiedName ) ) '{' ( (lv_elements_3_0= ruleAbstractElement ) )* '}'
            {
            match(input,13,FOLLOW_13_in_rulePackageDeclaration469); 

                    createLeafNode(grammarAccess.getPackageDeclarationAccess().getPackageKeyword_0(), null); 
                
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:251:1: ( (lv_name_1_0= ruleQualifiedName ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:252:1: (lv_name_1_0= ruleQualifiedName )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:252:1: (lv_name_1_0= ruleQualifiedName )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:253:3: lv_name_1_0= ruleQualifiedName
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getPackageDeclarationAccess().getNameQualifiedNameParserRuleCall_1_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleQualifiedName_in_rulePackageDeclaration490);
            lv_name_1_0=ruleQualifiedName();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getPackageDeclarationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"QualifiedName", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,14,FOLLOW_14_in_rulePackageDeclaration500); 

                    createLeafNode(grammarAccess.getPackageDeclarationAccess().getLeftCurlyBracketKeyword_2(), null); 
                
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:279:1: ( (lv_elements_3_0= ruleAbstractElement ) )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==11||LA3_0==13||(LA3_0>=16 && LA3_0<=17)) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:280:1: (lv_elements_3_0= ruleAbstractElement )
            	    {
            	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:280:1: (lv_elements_3_0= ruleAbstractElement )
            	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:281:3: lv_elements_3_0= ruleAbstractElement
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getPackageDeclarationAccess().getElementsAbstractElementParserRuleCall_3_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleAbstractElement_in_rulePackageDeclaration521);
            	    lv_elements_3_0=ruleAbstractElement();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getPackageDeclarationRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"elements",
            	    	        		lv_elements_3_0, 
            	    	        		"AbstractElement", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);

            match(input,15,FOLLOW_15_in_rulePackageDeclaration532); 

                    createLeafNode(grammarAccess.getPackageDeclarationAccess().getRightCurlyBracketKeyword_4(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end rulePackageDeclaration


    // $ANTLR start entryRuleType
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:315:1: entryRuleType returns [EObject current=null] : iv_ruleType= ruleType EOF ;
    public final EObject entryRuleType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleType = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:316:2: (iv_ruleType= ruleType EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:317:2: iv_ruleType= ruleType EOF
            {
             currentNode = createCompositeNode(grammarAccess.getTypeRule(), currentNode); 
            pushFollow(FOLLOW_ruleType_in_entryRuleType568);
            iv_ruleType=ruleType();
            _fsp--;

             current =iv_ruleType; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleType578); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleType


    // $ANTLR start ruleType
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:324:1: ruleType returns [EObject current=null] : (this_Entity_0= ruleEntity | this_DataType_1= ruleDataType ) ;
    public final EObject ruleType() throws RecognitionException {
        EObject current = null;

        EObject this_Entity_0 = null;

        EObject this_DataType_1 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:329:6: ( (this_Entity_0= ruleEntity | this_DataType_1= ruleDataType ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:330:1: (this_Entity_0= ruleEntity | this_DataType_1= ruleDataType )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:330:1: (this_Entity_0= ruleEntity | this_DataType_1= ruleDataType )
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==17) ) {
                alt4=1;
            }
            else if ( (LA4_0==16) ) {
                alt4=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("330:1: (this_Entity_0= ruleEntity | this_DataType_1= ruleDataType )", 4, 0, input);

                throw nvae;
            }
            switch (alt4) {
                case 1 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:331:5: this_Entity_0= ruleEntity
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getTypeAccess().getEntityParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleEntity_in_ruleType625);
                    this_Entity_0=ruleEntity();
                    _fsp--;

                     
                            current = this_Entity_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:341:5: this_DataType_1= ruleDataType
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getTypeAccess().getDataTypeParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleDataType_in_ruleType652);
                    this_DataType_1=ruleDataType();
                    _fsp--;

                     
                            current = this_DataType_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleType


    // $ANTLR start entryRuleDataType
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:357:1: entryRuleDataType returns [EObject current=null] : iv_ruleDataType= ruleDataType EOF ;
    public final EObject entryRuleDataType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDataType = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:358:2: (iv_ruleDataType= ruleDataType EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:359:2: iv_ruleDataType= ruleDataType EOF
            {
             currentNode = createCompositeNode(grammarAccess.getDataTypeRule(), currentNode); 
            pushFollow(FOLLOW_ruleDataType_in_entryRuleDataType687);
            iv_ruleDataType=ruleDataType();
            _fsp--;

             current =iv_ruleDataType; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDataType697); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleDataType


    // $ANTLR start ruleDataType
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:366:1: ruleDataType returns [EObject current=null] : ( 'datatype' ( (lv_name_1_0= RULE_ID ) ) ';' ) ;
    public final EObject ruleDataType() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:371:6: ( ( 'datatype' ( (lv_name_1_0= RULE_ID ) ) ';' ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:372:1: ( 'datatype' ( (lv_name_1_0= RULE_ID ) ) ';' )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:372:1: ( 'datatype' ( (lv_name_1_0= RULE_ID ) ) ';' )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:372:3: 'datatype' ( (lv_name_1_0= RULE_ID ) ) ';'
            {
            match(input,16,FOLLOW_16_in_ruleDataType732); 

                    createLeafNode(grammarAccess.getDataTypeAccess().getDatatypeKeyword_0(), null); 
                
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:376:1: ( (lv_name_1_0= RULE_ID ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:377:1: (lv_name_1_0= RULE_ID )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:377:1: (lv_name_1_0= RULE_ID )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:378:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleDataType749); 

            			createLeafNode(grammarAccess.getDataTypeAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getDataTypeRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,12,FOLLOW_12_in_ruleDataType764); 

                    createLeafNode(grammarAccess.getDataTypeAccess().getSemicolonKeyword_2(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleDataType


    // $ANTLR start entryRuleEntity
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:412:1: entryRuleEntity returns [EObject current=null] : iv_ruleEntity= ruleEntity EOF ;
    public final EObject entryRuleEntity() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEntity = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:413:2: (iv_ruleEntity= ruleEntity EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:414:2: iv_ruleEntity= ruleEntity EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEntityRule(), currentNode); 
            pushFollow(FOLLOW_ruleEntity_in_entryRuleEntity800);
            iv_ruleEntity=ruleEntity();
            _fsp--;

             current =iv_ruleEntity; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleEntity810); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEntity


    // $ANTLR start ruleEntity
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:421:1: ruleEntity returns [EObject current=null] : ( 'entity' ( (lv_name_1_0= RULE_ID ) ) ( 'extends' ( ( ruleQualifiedName ) ) )? '{' ( (lv_features_5_0= ruleFeature ) )* '}' ) ;
    public final EObject ruleEntity() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_features_5_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:426:6: ( ( 'entity' ( (lv_name_1_0= RULE_ID ) ) ( 'extends' ( ( ruleQualifiedName ) ) )? '{' ( (lv_features_5_0= ruleFeature ) )* '}' ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:427:1: ( 'entity' ( (lv_name_1_0= RULE_ID ) ) ( 'extends' ( ( ruleQualifiedName ) ) )? '{' ( (lv_features_5_0= ruleFeature ) )* '}' )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:427:1: ( 'entity' ( (lv_name_1_0= RULE_ID ) ) ( 'extends' ( ( ruleQualifiedName ) ) )? '{' ( (lv_features_5_0= ruleFeature ) )* '}' )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:427:3: 'entity' ( (lv_name_1_0= RULE_ID ) ) ( 'extends' ( ( ruleQualifiedName ) ) )? '{' ( (lv_features_5_0= ruleFeature ) )* '}'
            {
            match(input,17,FOLLOW_17_in_ruleEntity845); 

                    createLeafNode(grammarAccess.getEntityAccess().getEntityKeyword_0(), null); 
                
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:431:1: ( (lv_name_1_0= RULE_ID ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:432:1: (lv_name_1_0= RULE_ID )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:432:1: (lv_name_1_0= RULE_ID )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:433:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEntity862); 

            			createLeafNode(grammarAccess.getEntityAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getEntityRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:455:2: ( 'extends' ( ( ruleQualifiedName ) ) )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==18) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:455:4: 'extends' ( ( ruleQualifiedName ) )
                    {
                    match(input,18,FOLLOW_18_in_ruleEntity878); 

                            createLeafNode(grammarAccess.getEntityAccess().getExtendsKeyword_2_0(), null); 
                        
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:459:1: ( ( ruleQualifiedName ) )
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:460:1: ( ruleQualifiedName )
                    {
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:460:1: ( ruleQualifiedName )
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:461:3: ruleQualifiedName
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getEntityRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                     
                    	        currentNode=createCompositeNode(grammarAccess.getEntityAccess().getSuperTypeEntityCrossReference_2_1_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleQualifiedName_in_ruleEntity901);
                    ruleQualifiedName();
                    _fsp--;

                     
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,14,FOLLOW_14_in_ruleEntity913); 

                    createLeafNode(grammarAccess.getEntityAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:479:1: ( (lv_features_5_0= ruleFeature ) )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==RULE_ID||LA6_0==19||(LA6_0>=27 && LA6_0<=29)) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:480:1: (lv_features_5_0= ruleFeature )
            	    {
            	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:480:1: (lv_features_5_0= ruleFeature )
            	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:481:3: lv_features_5_0= ruleFeature
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getEntityAccess().getFeaturesFeatureParserRuleCall_4_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleFeature_in_ruleEntity934);
            	    lv_features_5_0=ruleFeature();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getEntityRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"features",
            	    	        		lv_features_5_0, 
            	    	        		"Feature", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);

            match(input,15,FOLLOW_15_in_ruleEntity945); 

                    createLeafNode(grammarAccess.getEntityAccess().getRightCurlyBracketKeyword_5(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEntity


    // $ANTLR start entryRuleFeature
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:515:1: entryRuleFeature returns [EObject current=null] : iv_ruleFeature= ruleFeature EOF ;
    public final EObject entryRuleFeature() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFeature = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:516:2: (iv_ruleFeature= ruleFeature EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:517:2: iv_ruleFeature= ruleFeature EOF
            {
             currentNode = createCompositeNode(grammarAccess.getFeatureRule(), currentNode); 
            pushFollow(FOLLOW_ruleFeature_in_entryRuleFeature981);
            iv_ruleFeature=ruleFeature();
            _fsp--;

             current =iv_ruleFeature; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleFeature991); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleFeature


    // $ANTLR start ruleFeature
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:524:1: ruleFeature returns [EObject current=null] : (this_StructuralFeature_0= ruleStructuralFeature | this_Operation_1= ruleOperation ) ;
    public final EObject ruleFeature() throws RecognitionException {
        EObject current = null;

        EObject this_StructuralFeature_0 = null;

        EObject this_Operation_1 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:529:6: ( (this_StructuralFeature_0= ruleStructuralFeature | this_Operation_1= ruleOperation ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:530:1: (this_StructuralFeature_0= ruleStructuralFeature | this_Operation_1= ruleOperation )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:530:1: (this_StructuralFeature_0= ruleStructuralFeature | this_Operation_1= ruleOperation )
            int alt7=2;
            alt7 = dfa7.predict(input);
            switch (alt7) {
                case 1 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:531:5: this_StructuralFeature_0= ruleStructuralFeature
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getFeatureAccess().getStructuralFeatureParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleStructuralFeature_in_ruleFeature1038);
                    this_StructuralFeature_0=ruleStructuralFeature();
                    _fsp--;

                     
                            current = this_StructuralFeature_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:541:5: this_Operation_1= ruleOperation
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getFeatureAccess().getOperationParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleOperation_in_ruleFeature1065);
                    this_Operation_1=ruleOperation();
                    _fsp--;

                     
                            current = this_Operation_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleFeature


    // $ANTLR start entryRuleStructuralFeature
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:557:1: entryRuleStructuralFeature returns [EObject current=null] : iv_ruleStructuralFeature= ruleStructuralFeature EOF ;
    public final EObject entryRuleStructuralFeature() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStructuralFeature = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:558:2: (iv_ruleStructuralFeature= ruleStructuralFeature EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:559:2: iv_ruleStructuralFeature= ruleStructuralFeature EOF
            {
             currentNode = createCompositeNode(grammarAccess.getStructuralFeatureRule(), currentNode); 
            pushFollow(FOLLOW_ruleStructuralFeature_in_entryRuleStructuralFeature1100);
            iv_ruleStructuralFeature=ruleStructuralFeature();
            _fsp--;

             current =iv_ruleStructuralFeature; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleStructuralFeature1110); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleStructuralFeature


    // $ANTLR start ruleStructuralFeature
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:566:1: ruleStructuralFeature returns [EObject current=null] : (this_Attribute_0= ruleAttribute | this_Reference_1= ruleReference ) ;
    public final EObject ruleStructuralFeature() throws RecognitionException {
        EObject current = null;

        EObject this_Attribute_0 = null;

        EObject this_Reference_1 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:571:6: ( (this_Attribute_0= ruleAttribute | this_Reference_1= ruleReference ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:572:1: (this_Attribute_0= ruleAttribute | this_Reference_1= ruleReference )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:572:1: (this_Attribute_0= ruleAttribute | this_Reference_1= ruleReference )
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==RULE_ID) ) {
                alt8=1;
            }
            else if ( (LA8_0==19) ) {
                alt8=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("572:1: (this_Attribute_0= ruleAttribute | this_Reference_1= ruleReference )", 8, 0, input);

                throw nvae;
            }
            switch (alt8) {
                case 1 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:573:5: this_Attribute_0= ruleAttribute
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getStructuralFeatureAccess().getAttributeParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleAttribute_in_ruleStructuralFeature1157);
                    this_Attribute_0=ruleAttribute();
                    _fsp--;

                     
                            current = this_Attribute_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:583:5: this_Reference_1= ruleReference
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getStructuralFeatureAccess().getReferenceParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleReference_in_ruleStructuralFeature1184);
                    this_Reference_1=ruleReference();
                    _fsp--;

                     
                            current = this_Reference_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleStructuralFeature


    // $ANTLR start entryRuleAttribute
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:599:1: entryRuleAttribute returns [EObject current=null] : iv_ruleAttribute= ruleAttribute EOF ;
    public final EObject entryRuleAttribute() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttribute = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:600:2: (iv_ruleAttribute= ruleAttribute EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:601:2: iv_ruleAttribute= ruleAttribute EOF
            {
             currentNode = createCompositeNode(grammarAccess.getAttributeRule(), currentNode); 
            pushFollow(FOLLOW_ruleAttribute_in_entryRuleAttribute1219);
            iv_ruleAttribute=ruleAttribute();
            _fsp--;

             current =iv_ruleAttribute; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAttribute1229); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleAttribute


    // $ANTLR start ruleAttribute
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:608:1: ruleAttribute returns [EObject current=null] : ( ( (lv_type_0_0= ruleTypeRef ) ) ( (lv_name_1_0= RULE_ID ) ) ';' ) ;
    public final EObject ruleAttribute() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_type_0_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:613:6: ( ( ( (lv_type_0_0= ruleTypeRef ) ) ( (lv_name_1_0= RULE_ID ) ) ';' ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:614:1: ( ( (lv_type_0_0= ruleTypeRef ) ) ( (lv_name_1_0= RULE_ID ) ) ';' )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:614:1: ( ( (lv_type_0_0= ruleTypeRef ) ) ( (lv_name_1_0= RULE_ID ) ) ';' )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:614:2: ( (lv_type_0_0= ruleTypeRef ) ) ( (lv_name_1_0= RULE_ID ) ) ';'
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:614:2: ( (lv_type_0_0= ruleTypeRef ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:615:1: (lv_type_0_0= ruleTypeRef )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:615:1: (lv_type_0_0= ruleTypeRef )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:616:3: lv_type_0_0= ruleTypeRef
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getAttributeAccess().getTypeTypeRefParserRuleCall_0_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleTypeRef_in_ruleAttribute1275);
            lv_type_0_0=ruleTypeRef();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getAttributeRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"type",
            	        		lv_type_0_0, 
            	        		"TypeRef", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:638:2: ( (lv_name_1_0= RULE_ID ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:639:1: (lv_name_1_0= RULE_ID )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:639:1: (lv_name_1_0= RULE_ID )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:640:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAttribute1292); 

            			createLeafNode(grammarAccess.getAttributeAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getAttributeRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,12,FOLLOW_12_in_ruleAttribute1307); 

                    createLeafNode(grammarAccess.getAttributeAccess().getSemicolonKeyword_2(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleAttribute


    // $ANTLR start entryRuleReference
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:674:1: entryRuleReference returns [EObject current=null] : iv_ruleReference= ruleReference EOF ;
    public final EObject entryRuleReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleReference = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:675:2: (iv_ruleReference= ruleReference EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:676:2: iv_ruleReference= ruleReference EOF
            {
             currentNode = createCompositeNode(grammarAccess.getReferenceRule(), currentNode); 
            pushFollow(FOLLOW_ruleReference_in_entryRuleReference1343);
            iv_ruleReference=ruleReference();
            _fsp--;

             current =iv_ruleReference; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleReference1353); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleReference


    // $ANTLR start ruleReference
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:683:1: ruleReference returns [EObject current=null] : ( 'ref' ( (lv_type_1_0= ruleTypeRef ) ) ( 'opposite' ( ( RULE_ID ) ) )? ( (lv_name_4_0= RULE_ID ) ) ';' ) ;
    public final EObject ruleReference() throws RecognitionException {
        EObject current = null;

        Token lv_name_4_0=null;
        EObject lv_type_1_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:688:6: ( ( 'ref' ( (lv_type_1_0= ruleTypeRef ) ) ( 'opposite' ( ( RULE_ID ) ) )? ( (lv_name_4_0= RULE_ID ) ) ';' ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:689:1: ( 'ref' ( (lv_type_1_0= ruleTypeRef ) ) ( 'opposite' ( ( RULE_ID ) ) )? ( (lv_name_4_0= RULE_ID ) ) ';' )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:689:1: ( 'ref' ( (lv_type_1_0= ruleTypeRef ) ) ( 'opposite' ( ( RULE_ID ) ) )? ( (lv_name_4_0= RULE_ID ) ) ';' )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:689:3: 'ref' ( (lv_type_1_0= ruleTypeRef ) ) ( 'opposite' ( ( RULE_ID ) ) )? ( (lv_name_4_0= RULE_ID ) ) ';'
            {
            match(input,19,FOLLOW_19_in_ruleReference1388); 

                    createLeafNode(grammarAccess.getReferenceAccess().getRefKeyword_0(), null); 
                
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:693:1: ( (lv_type_1_0= ruleTypeRef ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:694:1: (lv_type_1_0= ruleTypeRef )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:694:1: (lv_type_1_0= ruleTypeRef )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:695:3: lv_type_1_0= ruleTypeRef
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getReferenceAccess().getTypeTypeRefParserRuleCall_1_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleTypeRef_in_ruleReference1409);
            lv_type_1_0=ruleTypeRef();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getReferenceRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"type",
            	        		lv_type_1_0, 
            	        		"TypeRef", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:717:2: ( 'opposite' ( ( RULE_ID ) ) )?
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0==20) ) {
                alt9=1;
            }
            switch (alt9) {
                case 1 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:717:4: 'opposite' ( ( RULE_ID ) )
                    {
                    match(input,20,FOLLOW_20_in_ruleReference1420); 

                            createLeafNode(grammarAccess.getReferenceAccess().getOppositeKeyword_2_0(), null); 
                        
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:721:1: ( ( RULE_ID ) )
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:722:1: ( RULE_ID )
                    {
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:722:1: ( RULE_ID )
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:723:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getReferenceRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleReference1438); 

                    		createLeafNode(grammarAccess.getReferenceAccess().getOppositeReferenceCrossReference_2_1_0(), "opposite"); 
                    	

                    }


                    }


                    }
                    break;

            }

            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:735:4: ( (lv_name_4_0= RULE_ID ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:736:1: (lv_name_4_0= RULE_ID )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:736:1: (lv_name_4_0= RULE_ID )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:737:3: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleReference1457); 

            			createLeafNode(grammarAccess.getReferenceAccess().getNameIDTerminalRuleCall_3_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getReferenceRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_4_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,12,FOLLOW_12_in_ruleReference1472); 

                    createLeafNode(grammarAccess.getReferenceAccess().getSemicolonKeyword_4(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleReference


    // $ANTLR start entryRuleOperation
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:771:1: entryRuleOperation returns [EObject current=null] : iv_ruleOperation= ruleOperation EOF ;
    public final EObject entryRuleOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleOperation = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:772:2: (iv_ruleOperation= ruleOperation EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:773:2: iv_ruleOperation= ruleOperation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getOperationRule(), currentNode); 
            pushFollow(FOLLOW_ruleOperation_in_entryRuleOperation1508);
            iv_ruleOperation=ruleOperation();
            _fsp--;

             current =iv_ruleOperation; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleOperation1518); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleOperation


    // $ANTLR start ruleOperation
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:780:1: ruleOperation returns [EObject current=null] : ( ( (lv_visibility_0_0= ruleVisibility ) )? ( (lv_type_1_0= ruleTypeRef ) ) ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_params_4_0= ruleParameter ) ) ( ',' ( (lv_params_6_0= ruleParameter ) ) )* )? ')' ';' ) ;
    public final EObject ruleOperation() throws RecognitionException {
        EObject current = null;

        Token lv_name_2_0=null;
        Enumerator lv_visibility_0_0 = null;

        EObject lv_type_1_0 = null;

        EObject lv_params_4_0 = null;

        EObject lv_params_6_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:785:6: ( ( ( (lv_visibility_0_0= ruleVisibility ) )? ( (lv_type_1_0= ruleTypeRef ) ) ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_params_4_0= ruleParameter ) ) ( ',' ( (lv_params_6_0= ruleParameter ) ) )* )? ')' ';' ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:786:1: ( ( (lv_visibility_0_0= ruleVisibility ) )? ( (lv_type_1_0= ruleTypeRef ) ) ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_params_4_0= ruleParameter ) ) ( ',' ( (lv_params_6_0= ruleParameter ) ) )* )? ')' ';' )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:786:1: ( ( (lv_visibility_0_0= ruleVisibility ) )? ( (lv_type_1_0= ruleTypeRef ) ) ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_params_4_0= ruleParameter ) ) ( ',' ( (lv_params_6_0= ruleParameter ) ) )* )? ')' ';' )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:786:2: ( (lv_visibility_0_0= ruleVisibility ) )? ( (lv_type_1_0= ruleTypeRef ) ) ( (lv_name_2_0= RULE_ID ) ) '(' ( ( (lv_params_4_0= ruleParameter ) ) ( ',' ( (lv_params_6_0= ruleParameter ) ) )* )? ')' ';'
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:786:2: ( (lv_visibility_0_0= ruleVisibility ) )?
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( ((LA10_0>=27 && LA10_0<=29)) ) {
                alt10=1;
            }
            switch (alt10) {
                case 1 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:787:1: (lv_visibility_0_0= ruleVisibility )
                    {
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:787:1: (lv_visibility_0_0= ruleVisibility )
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:788:3: lv_visibility_0_0= ruleVisibility
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getOperationAccess().getVisibilityVisibilityEnumRuleCall_0_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleVisibility_in_ruleOperation1564);
                    lv_visibility_0_0=ruleVisibility();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getOperationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"visibility",
                    	        		lv_visibility_0_0, 
                    	        		"Visibility", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }
                    break;

            }

            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:810:3: ( (lv_type_1_0= ruleTypeRef ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:811:1: (lv_type_1_0= ruleTypeRef )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:811:1: (lv_type_1_0= ruleTypeRef )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:812:3: lv_type_1_0= ruleTypeRef
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getOperationAccess().getTypeTypeRefParserRuleCall_1_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleTypeRef_in_ruleOperation1586);
            lv_type_1_0=ruleTypeRef();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getOperationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"type",
            	        		lv_type_1_0, 
            	        		"TypeRef", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:834:2: ( (lv_name_2_0= RULE_ID ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:835:1: (lv_name_2_0= RULE_ID )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:835:1: (lv_name_2_0= RULE_ID )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:836:3: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleOperation1603); 

            			createLeafNode(grammarAccess.getOperationAccess().getNameIDTerminalRuleCall_2_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getOperationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_2_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,21,FOLLOW_21_in_ruleOperation1618); 

                    createLeafNode(grammarAccess.getOperationAccess().getLeftParenthesisKeyword_3(), null); 
                
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:862:1: ( ( (lv_params_4_0= ruleParameter ) ) ( ',' ( (lv_params_6_0= ruleParameter ) ) )* )?
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==RULE_ID) ) {
                alt12=1;
            }
            switch (alt12) {
                case 1 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:862:2: ( (lv_params_4_0= ruleParameter ) ) ( ',' ( (lv_params_6_0= ruleParameter ) ) )*
                    {
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:862:2: ( (lv_params_4_0= ruleParameter ) )
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:863:1: (lv_params_4_0= ruleParameter )
                    {
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:863:1: (lv_params_4_0= ruleParameter )
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:864:3: lv_params_4_0= ruleParameter
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getOperationAccess().getParamsParameterParserRuleCall_4_0_0(), currentNode); 
                    	    
                    pushFollow(FOLLOW_ruleParameter_in_ruleOperation1640);
                    lv_params_4_0=ruleParameter();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getOperationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"params",
                    	        		lv_params_4_0, 
                    	        		"Parameter", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:886:2: ( ',' ( (lv_params_6_0= ruleParameter ) ) )*
                    loop11:
                    do {
                        int alt11=2;
                        int LA11_0 = input.LA(1);

                        if ( (LA11_0==22) ) {
                            alt11=1;
                        }


                        switch (alt11) {
                    	case 1 :
                    	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:886:4: ',' ( (lv_params_6_0= ruleParameter ) )
                    	    {
                    	    match(input,22,FOLLOW_22_in_ruleOperation1651); 

                    	            createLeafNode(grammarAccess.getOperationAccess().getCommaKeyword_4_1_0(), null); 
                    	        
                    	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:890:1: ( (lv_params_6_0= ruleParameter ) )
                    	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:891:1: (lv_params_6_0= ruleParameter )
                    	    {
                    	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:891:1: (lv_params_6_0= ruleParameter )
                    	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:892:3: lv_params_6_0= ruleParameter
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getOperationAccess().getParamsParameterParserRuleCall_4_1_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FOLLOW_ruleParameter_in_ruleOperation1672);
                    	    lv_params_6_0=ruleParameter();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getOperationRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"params",
                    	    	        		lv_params_6_0, 
                    	    	        		"Parameter", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop11;
                        }
                    } while (true);


                    }
                    break;

            }

            match(input,23,FOLLOW_23_in_ruleOperation1686); 

                    createLeafNode(grammarAccess.getOperationAccess().getRightParenthesisKeyword_5(), null); 
                
            match(input,12,FOLLOW_12_in_ruleOperation1696); 

                    createLeafNode(grammarAccess.getOperationAccess().getSemicolonKeyword_6(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleOperation


    // $ANTLR start entryRuleParameter
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:930:1: entryRuleParameter returns [EObject current=null] : iv_ruleParameter= ruleParameter EOF ;
    public final EObject entryRuleParameter() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleParameter = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:931:2: (iv_ruleParameter= ruleParameter EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:932:2: iv_ruleParameter= ruleParameter EOF
            {
             currentNode = createCompositeNode(grammarAccess.getParameterRule(), currentNode); 
            pushFollow(FOLLOW_ruleParameter_in_entryRuleParameter1732);
            iv_ruleParameter=ruleParameter();
            _fsp--;

             current =iv_ruleParameter; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleParameter1742); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleParameter


    // $ANTLR start ruleParameter
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:939:1: ruleParameter returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) ( (lv_type_1_0= ruleTypeRef ) ) ) ;
    public final EObject ruleParameter() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        EObject lv_type_1_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:944:6: ( ( ( (lv_name_0_0= RULE_ID ) ) ( (lv_type_1_0= ruleTypeRef ) ) ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:945:1: ( ( (lv_name_0_0= RULE_ID ) ) ( (lv_type_1_0= ruleTypeRef ) ) )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:945:1: ( ( (lv_name_0_0= RULE_ID ) ) ( (lv_type_1_0= ruleTypeRef ) ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:945:2: ( (lv_name_0_0= RULE_ID ) ) ( (lv_type_1_0= ruleTypeRef ) )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:945:2: ( (lv_name_0_0= RULE_ID ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:946:1: (lv_name_0_0= RULE_ID )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:946:1: (lv_name_0_0= RULE_ID )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:947:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleParameter1784); 

            			createLeafNode(grammarAccess.getParameterAccess().getNameIDTerminalRuleCall_0_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getParameterRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_0_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:969:2: ( (lv_type_1_0= ruleTypeRef ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:970:1: (lv_type_1_0= ruleTypeRef )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:970:1: (lv_type_1_0= ruleTypeRef )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:971:3: lv_type_1_0= ruleTypeRef
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getParameterAccess().getTypeTypeRefParserRuleCall_1_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleTypeRef_in_ruleParameter1810);
            lv_type_1_0=ruleTypeRef();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getParameterRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"type",
            	        		lv_type_1_0, 
            	        		"TypeRef", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleParameter


    // $ANTLR start entryRuleTypeRef
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1001:1: entryRuleTypeRef returns [EObject current=null] : iv_ruleTypeRef= ruleTypeRef EOF ;
    public final EObject entryRuleTypeRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTypeRef = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1002:2: (iv_ruleTypeRef= ruleTypeRef EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1003:2: iv_ruleTypeRef= ruleTypeRef EOF
            {
             currentNode = createCompositeNode(grammarAccess.getTypeRefRule(), currentNode); 
            pushFollow(FOLLOW_ruleTypeRef_in_entryRuleTypeRef1846);
            iv_ruleTypeRef=ruleTypeRef();
            _fsp--;

             current =iv_ruleTypeRef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTypeRef1856); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleTypeRef


    // $ANTLR start ruleTypeRef
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1010:1: ruleTypeRef returns [EObject current=null] : ( ( ( ruleQualifiedName ) ) ( (lv_multi_1_0= '*' ) )? ) ;
    public final EObject ruleTypeRef() throws RecognitionException {
        EObject current = null;

        Token lv_multi_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1015:6: ( ( ( ( ruleQualifiedName ) ) ( (lv_multi_1_0= '*' ) )? ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1016:1: ( ( ( ruleQualifiedName ) ) ( (lv_multi_1_0= '*' ) )? )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1016:1: ( ( ( ruleQualifiedName ) ) ( (lv_multi_1_0= '*' ) )? )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1016:2: ( ( ruleQualifiedName ) ) ( (lv_multi_1_0= '*' ) )?
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1016:2: ( ( ruleQualifiedName ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1017:1: ( ruleQualifiedName )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1017:1: ( ruleQualifiedName )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1018:3: ruleQualifiedName
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getTypeRefRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
             
            	        currentNode=createCompositeNode(grammarAccess.getTypeRefAccess().getReferencedTypeCrossReference_0_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleQualifiedName_in_ruleTypeRef1904);
            ruleQualifiedName();
            _fsp--;

             
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1032:2: ( (lv_multi_1_0= '*' ) )?
            int alt13=2;
            int LA13_0 = input.LA(1);

            if ( (LA13_0==24) ) {
                alt13=1;
            }
            switch (alt13) {
                case 1 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1033:1: (lv_multi_1_0= '*' )
                    {
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1033:1: (lv_multi_1_0= '*' )
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1034:3: lv_multi_1_0= '*'
                    {
                    lv_multi_1_0=(Token)input.LT(1);
                    match(input,24,FOLLOW_24_in_ruleTypeRef1922); 

                            createLeafNode(grammarAccess.getTypeRefAccess().getMultiAsteriskKeyword_1_0(), "multi"); 
                        

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getTypeRefRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        
                    	        try {
                    	       		set(current, "multi", true, "*", lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleTypeRef


    // $ANTLR start entryRuleQualifiedNameWithWildCard
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1061:1: entryRuleQualifiedNameWithWildCard returns [String current=null] : iv_ruleQualifiedNameWithWildCard= ruleQualifiedNameWithWildCard EOF ;
    public final String entryRuleQualifiedNameWithWildCard() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedNameWithWildCard = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1062:2: (iv_ruleQualifiedNameWithWildCard= ruleQualifiedNameWithWildCard EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1063:2: iv_ruleQualifiedNameWithWildCard= ruleQualifiedNameWithWildCard EOF
            {
             currentNode = createCompositeNode(grammarAccess.getQualifiedNameWithWildCardRule(), currentNode); 
            pushFollow(FOLLOW_ruleQualifiedNameWithWildCard_in_entryRuleQualifiedNameWithWildCard1973);
            iv_ruleQualifiedNameWithWildCard=ruleQualifiedNameWithWildCard();
            _fsp--;

             current =iv_ruleQualifiedNameWithWildCard.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleQualifiedNameWithWildCard1984); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleQualifiedNameWithWildCard


    // $ANTLR start ruleQualifiedNameWithWildCard
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1070:1: ruleQualifiedNameWithWildCard returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? ) ;
    public final AntlrDatatypeRuleToken ruleQualifiedNameWithWildCard() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_QualifiedName_0 = null;


         setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1075:6: ( (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1076:1: (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1076:1: (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1077:5: this_QualifiedName_0= ruleQualifiedName (kw= '.*' )?
            {
             
                    currentNode=createCompositeNode(grammarAccess.getQualifiedNameWithWildCardAccess().getQualifiedNameParserRuleCall_0(), currentNode); 
                
            pushFollow(FOLLOW_ruleQualifiedName_in_ruleQualifiedNameWithWildCard2031);
            this_QualifiedName_0=ruleQualifiedName();
            _fsp--;


            		current.merge(this_QualifiedName_0);
                
             
                    currentNode = currentNode.getParent();
                
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1087:1: (kw= '.*' )?
            int alt14=2;
            int LA14_0 = input.LA(1);

            if ( (LA14_0==25) ) {
                alt14=1;
            }
            switch (alt14) {
                case 1 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1088:2: kw= '.*'
                    {
                    kw=(Token)input.LT(1);
                    match(input,25,FOLLOW_25_in_ruleQualifiedNameWithWildCard2050); 

                            current.merge(kw);
                            createLeafNode(grammarAccess.getQualifiedNameWithWildCardAccess().getFullStopAsteriskKeyword_1(), null); 
                        

                    }
                    break;

            }


            }


            }

             resetLookahead(); 
            	    lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleQualifiedNameWithWildCard


    // $ANTLR start entryRuleQualifiedName
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1101:1: entryRuleQualifiedName returns [String current=null] : iv_ruleQualifiedName= ruleQualifiedName EOF ;
    public final String entryRuleQualifiedName() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedName = null;


        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1102:2: (iv_ruleQualifiedName= ruleQualifiedName EOF )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1103:2: iv_ruleQualifiedName= ruleQualifiedName EOF
            {
             currentNode = createCompositeNode(grammarAccess.getQualifiedNameRule(), currentNode); 
            pushFollow(FOLLOW_ruleQualifiedName_in_entryRuleQualifiedName2093);
            iv_ruleQualifiedName=ruleQualifiedName();
            _fsp--;

             current =iv_ruleQualifiedName.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleQualifiedName2104); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleQualifiedName


    // $ANTLR start ruleQualifiedName
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1110:1: ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) ;
    public final AntlrDatatypeRuleToken ruleQualifiedName() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;

         setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1115:6: ( (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1116:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1116:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1116:6: this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )*
            {
            this_ID_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleQualifiedName2144); 

            		current.merge(this_ID_0);
                
             
                createLeafNode(grammarAccess.getQualifiedNameAccess().getIDTerminalRuleCall_0(), null); 
                
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1123:1: (kw= '.' this_ID_2= RULE_ID )*
            loop15:
            do {
                int alt15=2;
                int LA15_0 = input.LA(1);

                if ( (LA15_0==26) ) {
                    alt15=1;
                }


                switch (alt15) {
            	case 1 :
            	    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1124:2: kw= '.' this_ID_2= RULE_ID
            	    {
            	    kw=(Token)input.LT(1);
            	    match(input,26,FOLLOW_26_in_ruleQualifiedName2163); 

            	            current.merge(kw);
            	            createLeafNode(grammarAccess.getQualifiedNameAccess().getFullStopKeyword_1_0(), null); 
            	        
            	    this_ID_2=(Token)input.LT(1);
            	    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleQualifiedName2178); 

            	    		current.merge(this_ID_2);
            	        
            	     
            	        createLeafNode(grammarAccess.getQualifiedNameAccess().getIDTerminalRuleCall_1_1(), null); 
            	        

            	    }
            	    break;

            	default :
            	    break loop15;
                }
            } while (true);


            }


            }

             resetLookahead(); 
            	    lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleQualifiedName


    // $ANTLR start ruleVisibility
    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1144:1: ruleVisibility returns [Enumerator current=null] : ( ( 'public' ) | ( 'private' ) | ( 'protected' ) ) ;
    public final Enumerator ruleVisibility() throws RecognitionException {
        Enumerator current = null;

         setCurrentLookahead(); resetLookahead(); 
        try {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1148:6: ( ( ( 'public' ) | ( 'private' ) | ( 'protected' ) ) )
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1149:1: ( ( 'public' ) | ( 'private' ) | ( 'protected' ) )
            {
            // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1149:1: ( ( 'public' ) | ( 'private' ) | ( 'protected' ) )
            int alt16=3;
            switch ( input.LA(1) ) {
            case 27:
                {
                alt16=1;
                }
                break;
            case 28:
                {
                alt16=2;
                }
                break;
            case 29:
                {
                alt16=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("1149:1: ( ( 'public' ) | ( 'private' ) | ( 'protected' ) )", 16, 0, input);

                throw nvae;
            }

            switch (alt16) {
                case 1 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1149:2: ( 'public' )
                    {
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1149:2: ( 'public' )
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1149:4: 'public'
                    {
                    match(input,27,FOLLOW_27_in_ruleVisibility2237); 

                            current = grammarAccess.getVisibilityAccess().getPublicEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getVisibilityAccess().getPublicEnumLiteralDeclaration_0(), null); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1155:6: ( 'private' )
                    {
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1155:6: ( 'private' )
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1155:8: 'private'
                    {
                    match(input,28,FOLLOW_28_in_ruleVisibility2252); 

                            current = grammarAccess.getVisibilityAccess().getPrivateEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getVisibilityAccess().getPrivateEnumLiteralDeclaration_1(), null); 
                        

                    }


                    }
                    break;
                case 3 :
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1161:6: ( 'protected' )
                    {
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1161:6: ( 'protected' )
                    // ../net.danieldietrich.gwt.dsl/src-gen/net/danieldietrich/gwt/dsl/parser/antlr/internal/InternalDomainModel.g:1161:8: 'protected'
                    {
                    match(input,29,FOLLOW_29_in_ruleVisibility2267); 

                            current = grammarAccess.getVisibilityAccess().getProtectedEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getVisibilityAccess().getProtectedEnumLiteralDeclaration_2(), null); 
                        

                    }


                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleVisibility


    protected DFA7 dfa7 = new DFA7(this);
    static final String DFA7_eotS =
        "\10\uffff";
    static final String DFA7_eofS =
        "\10\uffff";
    static final String DFA7_minS =
        "\2\4\2\uffff\2\4\1\14\1\4";
    static final String DFA7_maxS =
        "\1\35\1\32\2\uffff\2\4\1\25\1\32";
    static final String DFA7_acceptS =
        "\2\uffff\1\1\1\2\4\uffff";
    static final String DFA7_specialS =
        "\10\uffff}>";
    static final String[] DFA7_transitionS = {
            "\1\1\16\uffff\1\2\7\uffff\3\3",
            "\1\6\23\uffff\1\5\1\uffff\1\4",
            "",
            "",
            "\1\7",
            "\1\6",
            "\1\2\10\uffff\1\3",
            "\1\6\23\uffff\1\5\1\uffff\1\4"
    };

    static final short[] DFA7_eot = DFA.unpackEncodedString(DFA7_eotS);
    static final short[] DFA7_eof = DFA.unpackEncodedString(DFA7_eofS);
    static final char[] DFA7_min = DFA.unpackEncodedStringToUnsignedChars(DFA7_minS);
    static final char[] DFA7_max = DFA.unpackEncodedStringToUnsignedChars(DFA7_maxS);
    static final short[] DFA7_accept = DFA.unpackEncodedString(DFA7_acceptS);
    static final short[] DFA7_special = DFA.unpackEncodedString(DFA7_specialS);
    static final short[][] DFA7_transition;

    static {
        int numStates = DFA7_transitionS.length;
        DFA7_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA7_transition[i] = DFA.unpackEncodedString(DFA7_transitionS[i]);
        }
    }

    class DFA7 extends DFA {

        public DFA7(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 7;
            this.eot = DFA7_eot;
            this.eof = DFA7_eof;
            this.min = DFA7_min;
            this.max = DFA7_max;
            this.accept = DFA7_accept;
            this.special = DFA7_special;
            this.transition = DFA7_transition;
        }
        public String getDescription() {
            return "530:1: (this_StructuralFeature_0= ruleStructuralFeature | this_Operation_1= ruleOperation )";
        }
    }
 

    public static final BitSet FOLLOW_ruleDomainModel_in_entryRuleDomainModel75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDomainModel85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractElement_in_ruleDomainModel130 = new BitSet(new long[]{0x0000000000032802L});
    public static final BitSet FOLLOW_ruleAbstractElement_in_entryRuleAbstractElement166 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractElement176 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePackageDeclaration_in_ruleAbstractElement223 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleType_in_ruleAbstractElement250 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleImport_in_ruleAbstractElement277 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleImport_in_entryRuleImport312 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleImport322 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleImport357 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedNameWithWildCard_in_ruleImport378 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleImport388 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePackageDeclaration_in_entryRulePackageDeclaration424 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePackageDeclaration434 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_13_in_rulePackageDeclaration469 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_rulePackageDeclaration490 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_rulePackageDeclaration500 = new BitSet(new long[]{0x000000000003A800L});
    public static final BitSet FOLLOW_ruleAbstractElement_in_rulePackageDeclaration521 = new BitSet(new long[]{0x000000000003A800L});
    public static final BitSet FOLLOW_15_in_rulePackageDeclaration532 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleType_in_entryRuleType568 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleType578 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEntity_in_ruleType625 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDataType_in_ruleType652 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDataType_in_entryRuleDataType687 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDataType697 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_16_in_ruleDataType732 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleDataType749 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleDataType764 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEntity_in_entryRuleEntity800 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleEntity810 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_17_in_ruleEntity845 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleEntity862 = new BitSet(new long[]{0x0000000000044000L});
    public static final BitSet FOLLOW_18_in_ruleEntity878 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_ruleEntity901 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleEntity913 = new BitSet(new long[]{0x0000000038088010L});
    public static final BitSet FOLLOW_ruleFeature_in_ruleEntity934 = new BitSet(new long[]{0x0000000038088010L});
    public static final BitSet FOLLOW_15_in_ruleEntity945 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFeature_in_entryRuleFeature981 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleFeature991 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStructuralFeature_in_ruleFeature1038 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOperation_in_ruleFeature1065 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStructuralFeature_in_entryRuleStructuralFeature1100 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleStructuralFeature1110 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttribute_in_ruleStructuralFeature1157 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleReference_in_ruleStructuralFeature1184 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAttribute_in_entryRuleAttribute1219 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAttribute1229 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTypeRef_in_ruleAttribute1275 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAttribute1292 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleAttribute1307 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleReference_in_entryRuleReference1343 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleReference1353 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_19_in_ruleReference1388 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleTypeRef_in_ruleReference1409 = new BitSet(new long[]{0x0000000000100010L});
    public static final BitSet FOLLOW_20_in_ruleReference1420 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleReference1438 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleReference1457 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleReference1472 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleOperation_in_entryRuleOperation1508 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleOperation1518 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleVisibility_in_ruleOperation1564 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleTypeRef_in_ruleOperation1586 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleOperation1603 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleOperation1618 = new BitSet(new long[]{0x0000000000800010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleOperation1640 = new BitSet(new long[]{0x0000000000C00000L});
    public static final BitSet FOLLOW_22_in_ruleOperation1651 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleOperation1672 = new BitSet(new long[]{0x0000000000C00000L});
    public static final BitSet FOLLOW_23_in_ruleOperation1686 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleOperation1696 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleParameter_in_entryRuleParameter1732 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleParameter1742 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleParameter1784 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleTypeRef_in_ruleParameter1810 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTypeRef_in_entryRuleTypeRef1846 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTypeRef1856 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_ruleTypeRef1904 = new BitSet(new long[]{0x0000000001000002L});
    public static final BitSet FOLLOW_24_in_ruleTypeRef1922 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleQualifiedNameWithWildCard_in_entryRuleQualifiedNameWithWildCard1973 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleQualifiedNameWithWildCard1984 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_ruleQualifiedNameWithWildCard2031 = new BitSet(new long[]{0x0000000002000002L});
    public static final BitSet FOLLOW_25_in_ruleQualifiedNameWithWildCard2050 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_entryRuleQualifiedName2093 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleQualifiedName2104 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleQualifiedName2144 = new BitSet(new long[]{0x0000000004000002L});
    public static final BitSet FOLLOW_26_in_ruleQualifiedName2163 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleQualifiedName2178 = new BitSet(new long[]{0x0000000004000002L});
    public static final BitSet FOLLOW_27_in_ruleVisibility2237 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_ruleVisibility2252 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_ruleVisibility2267 = new BitSet(new long[]{0x0000000000000002L});

}